import { apiClient } from 'axiom-view';

export const documentApi = {
  /**
   * 获取指定知识库的文档列表 (分页)。
   * @param {object} params - 查询参数。
   * @param {string} params.knowledge_base_id - 知识库ID。
   * @param {number} params.page - 页码。
   * @param {number} params.page_size - 每页数量。
   * @param {string} [params.file_name] - 文件名搜索关键字。
   * @returns {Promise<ApiResponse<PaginatedResponse<KnowledgeDocumentVO>>>}
   */
  listDocuments(params) {
    return apiClient.get('/documents', { params });
  },

  /**
   * 获取指定知识库的所有文档列表 (不分页)。
   * @param {object} params - 查询参数。
   * @param {string} params.knowledge_base_id - 知识库ID。
   * @param {number[]} [params.status] - 按索引状态过滤文档 (0: PENDING, 1: INDEXING, 2: COMPLETED, 3: FAILED)。
   * @returns {Promise<ApiResponse<KnowledgeDocumentVO[]>>}
   */
  listAllDocuments(params) {
    // 根据 API 文档，status 参数应在 Body 中，其余在 Query 中
    const { status, ...queryParams } = params;
    return apiClient.get('/documents/list-all', { 
      params: queryParams,
      data: { status: status } // 修正：status 也应该被包裹在一个对象中
    });
  },

  /**
   * 批量解析多个文档内容以供预览。
   * @param {string[]} documentIds - 要批量解析的文档记录ID列表。
   * @returns {Promise<ApiResponse<DocumentParseResultVO[]>>}
   */
  batchParseDocuments(documentIds) {
    return apiClient.post('/documents/batch-parse', { document_ids: documentIds });
  },

  /**
   * 上传单个文件到指定的知识库。
   * @param {string} kbId - 知识库ID。
   * @param {FormData} formData - 包含文件的表单数据。
   * @returns {Promise<ApiResponse<KnowledgeDocumentVO>>}
   */
  uploadDocument(kbId, formData) {
    formData.append('knowledge_base_id', kbId);
    return apiClient.post('/documents/upload', formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
    });
  },

  /**
   * [新增] 批量上传多个文件到指定的知识库。
   * @param {string} kbId - 知识库ID。
   * @param {File[]} files - 文件对象数组。
   * @returns {Promise<ApiResponse<KnowledgeDocumentVO[]>>}
   */
  batchUploadDocuments(kbId, files) {
    const formData = new FormData();
    formData.append('knowledge_base_id', kbId);
    files.forEach(file => {
      formData.append('files', file);
    });
    return apiClient.post('/documents/batch-upload', formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
    });
  },

  /**
   * 批量删除多个文档。
   * @param {string[]} documentIds - 要批量删除的文档ID列表。
   * @returns {Promise<ApiResponse<any>>}
   */
  batchDeleteDocuments(documentIds) {
    return apiClient.post('/documents/batch-delete', { document_ids: documentIds });
  },

  /**
   * 删除单个文档。
   * @param {string} docDbId - 文档在数据库中的ID。
   * @returns {Promise<ApiResponse<any>>}
   */
  deleteDocument(docDbId) {
    return apiClient.delete(`/documents/${docDbId}`);
  },
  
  /**
   * 解析指定的文档以供预览。
   * @param {string} docDbId - 文档在数据库中的ID。
   * @returns {Promise<ApiResponse<DocumentParseResultVO>>}
   */
  parseDocument(docDbId) {
    return apiClient.post(`/documents/${docDbId}/parse`);
  },
  
  /**
   * 批量对多个文档进行分块并预览结果
   * @param {object} data - 分块配置
   * @returns {Promise<ApiResponse<DocumentSplitResultVO[]>>}
   */
  batchSplitDocuments(data) {
    return apiClient.post('/documents/batch-split', data);
  },

  /**
   * 切换文档的启用/禁用状态。
   * @param {string} docDbId - 要操作的文档记录ID。
   * @returns {Promise<ApiResponse<KnowledgeDocumentVO>>}
   */
  toggleDocumentStatus(docDbId) {
    return apiClient.put(`/documents/${docDbId}/toggle-enabled`);
  },

  /**
   * [新增] 获取文档的下载URL。
   * @param {string} docDbId - 文档ID。
   * @returns {string}
   */
  getDownloadUrl(docDbId) {
    // apiClient.defaults.baseURL 是 Axios 实例的基础 URL
    const baseUrl = apiClient.defaults.baseURL || '';
    return `${baseUrl}/documents/${docDbId}/download`;
  }
}; 